#ifndef _NASKFUNC_H
#define _NASKFUNC_H 1

#define len_int(s)(sizeof(s) / sizeof(int))
#define len_char(s)(sizeof(s) / sizeof(char))

//这里存放的是naskfunc.nas的头文件

//让处理器休眠
void io_hlt(void);
// 往指定地址addr中写入数据data
void write_mem8(int addr, int data);
// 关闭所有可屏蔽中断
void io_cli(void);
// 打开所有可屏蔽中断
void io_sti(void);
// 将8位的data输出到port端口
void io_out8(int port, int data);
// 从port端口读入8位数据到AL中
int io_in8(int port);
// 将EFLAGS寄存器的内容返回
int io_load_eflags(void);
// 将参数eflags的内容作为EFLAGS寄存器的值
void io_store_eflags(int eflags);
// 设置全局段号描述表
void load_gdtr(int limit, int addr);
// 设置全局中断描述表
void load_idtr(int limit, int addr);
/**处理栈异常中断*/
void asm_inthandler0c(void);
/**处理异常中断*/
void asm_inthandler0d(void);
// IRQ0服务程序
void asm_inthandler20(void);
// IRQ1服务程序
void asm_inthandler21(void);
// IRQ7服务程序
void asm_inthandler27(void);
// IRQ12服务程序
void asm_inthandler2c(void);
// 打开所有可屏蔽中断,并且处理器进入暂停状态
void io_stihlt(void);
/* 获取CR0寄存器的值 */
int load_cr0(void);
/* 设置CR0寄存器的值 */
void store_cr0(int cr0);
/* 内存检测函数 */
unsigned int memtest_sub(unsigned int start, unsigned int end);
/**加载任务*/
void load_tr(int tr);
/**jmp far 跳转*/
void farjmp(int eip, int cs);
/**call far 跳转*/
void farcall(int eip, int cs);
/**调用系统API*/
void asm_system_api();
void start_app(int eip, int cs, int esp, int ds, int *tss_esp0);
void asm_end_app(void);
///asmhead.nas
/** 存储启动信息的结构体
 * cyls 存放着在ipl10中读入的柱面数	leds 存放着led灯的状态
 * vmode 存放着关于颜色数目的信息。颜色的位数	reserve 是"占位符" 在asmhead.nas中该字节未使用
 * scrnx 分辨率的x		scrny 分辨率的y		vram 图像缓冲区首地址
 */
struct BOOTINFO {
	char cyls, leds, vmode, reserve;
	short scrnx, scrny;
	char *vram;
};
#define ADR_BOOTINFO 0x00000ff0

//extern struct FIFO32 keyfifo, mousefifo;

#endif
